//////////////////////////////////////////////////////////////////////////
// rasz data ex
struct qgRaszDataEx : public qgRaszData
{
	qgRaszDataEx(qgFill fill, qgCull cull, qgCmpOp dfunc, bool dwrite = true, kint dbias = 0, float dclamp = 0.0f, float slsl = 0.0f)
	{
		this->fill = fill;
		this->cull = cull;
		this->dfunc = dfunc;
		this->dwrite = dwrite;
		this->dbias = dbias;
		this->dclamp = dclamp;
		this->slope_scale = slsl;
	}

	explicit qgRaszDataEx(qgCull cull, qgCmpOp dfunc = QGCOP_LEQ, bool dwrite = true, kint dbias = 0, float dclamp = 0.0f, float slsl = 0.0f)
	{
		this->fill = QGFILL_SOLID;
		this->cull = cull;
		this->dfunc = dfunc;
		this->dwrite = dwrite;
		this->dbias = dbias;
		this->dclamp = dclamp;
		this->slope_scale = slsl;
	}

	explicit qgRaszDataEx(qgCmpOp dfunc, bool dwrite = true, kint dbias = 0, float dclamp = 0.0f, float slsl = 0.0f)
	{
		this->fill = QGFILL_SOLID;
		this->cull = QGCULL_BACK;
		this->dfunc = dfunc;
		this->dwrite = dwrite;
		this->dbias = dbias;
		this->dclamp = dclamp;
		this->slope_scale = slsl;
	}

	explicit qgRaszDataEx(bool dwrite = true, kint dbias = 0, float dclamp = 0.0f, float slsl = 0.0f)
	{
		this->fill = QGFILL_SOLID;
		this->cull = QGCULL_BACK;
		this->dfunc = QGCOP_LEQ;
		this->dwrite = dwrite;
		this->dbias = dbias;
		this->dclamp = dclamp;
		this->slope_scale = slsl;
	}
};


//////////////////////////////////////////////////////////////////////////
// blend data ex
struct qgBlndDataEx : public qgBlndData
{
	qgBlndDataEx(qgMask mask, qgBlendOp op, qgBlendValue src, qgBlendValue dest, qgBlendOp ao = QGBLO_NONE, qgBlendValue as = QGBLV_NONE, qgBlendValue ad = QGBLV_NONE)
	{
		this->mask = mask;
		this->blend.op = op;
		this->blend.src = src;
		this->blend.dest = dest;
		this->alpha.op = ao;
		this->alpha.src = as;
		this->alpha.dest = ad;
	}

	qgBlndDataEx(qgBlendOp op, qgBlendValue src, qgBlendValue dest, qgBlendOp ao = QGBLO_NONE, qgBlendValue as = QGBLV_NONE, qgBlendValue ad = QGBLV_NONE)
	{
		this->mask = QGMASK_ALL;
		this->blend.op = op;
		this->blend.src = src;
		this->blend.dest = dest;
		this->alpha.op = ao;
		this->alpha.src = as;
		this->alpha.dest = ad;
	}
};


//////////////////////////////////////////////////////////////////////////
// splr data ex
struct qgSplrDataEx : public qgSplrData
{
	qgSplrDataEx() {}

	qgSplrDataEx(qgFilter filt, qgAddress addru, qgAddress addrv, qgAddress addrw, qgCmpOp cop, const tpl::ColorValue& border, float lodbias, const tpl::Vec2& lodrange)
	{
		this->filt = filt;
		this->addru = addru;
		this->addrv = addrv;
		this->addrw = addrw;
		this->cop = cop;
		this->border = border;
		this->lodbias = lodbias;
		this->lodrange = lodrange;
	}

	explicit qgSplrDataEx(qgFilter filt, qgAddress addru = QGADR_CLAMP, qgAddress addrv = QGADR_CLAMP, qgAddress addrw = QGADR_CLAMP, qgCmpOp cop = QGCOP_NEVER, const tpl::ColorValue& border = tpl::ColorValues::White)
	{
		this->filt = filt;
		this->addru = addru;
		this->addrv = addrv;
		this->addrw = addrw;
		this->cop = cop;
		this->border = border;
		this->lodbias = 0.0f;
		this->lodrange.Set(-FLT_MAX, FLT_MAX);	// depend on system or renderer.
	}
};

